// 文字最多显示多少个字，超过用省略号代替
const mostTextLength = (string, length = 12) => {
	if (length > 2) {
		if (string.length > length) {
			return string.substr(0, length - 2) + '……'
		}
		return string
	}
	return string.substr(0, length)
}

/**
 * 金额的显示
 * 数据库拿到的金额都是以分为单位的int值。要转换为一般情况
 * decimal：保留几位小数。直接去尾法
 */
const money = (value = 0, decimal = 2, unit = '￥') => {
	if (value && typeof(Number(value)) === 'number' && isFinite(Number(value))) {
		var str = value.toString()
		if (str.length === 1) {
			if (decimal < 2) {
				str = `${unit}0`
			} else {
				str = `${unit}0.0${str}`
			}
		} else if (str.length === 2) {
			if (decimal === 2) {
				str = `${unit}0.${str}`
			} else if (decimal === 1) {
				str = `${unit}0.${str.substr(0, 1)}`
			} else {
				str = `${unit}0`
			}
		} else {
			if (decimal === 2) {
				str = unit + str.substr(0, str.length - 2) + '.' + str.substr(str.length - 2, 2)
			} else if (decimal === 1) {
				str = unit + str.substr(0, str.length - 2) + '.' + str.substr(str.length - 2, 1)
			} else {
				str = unit + str.substr(0, str.length - 2)
			}
		}
		return str
	}
	return value
}

/**
 * 显示金额的逆处理
 * 一般的金额显示转化为数据库需要的分
 */
const moneyToTable = (value, unit = '￥') => {
	if (value) {
		value = value.toString()
		if (value.substr(0, 1) === unit) {
			value = value.substr(1, value.length - 1)
		}
		const arr = value.split('.')
		if (arr.length === 1) {
			return parseInt(arr[0] + '00')
		}
		if (arr[1].length === 1) {
			return parseInt(arr[0] + arr[1] + '0')
		}
		return parseInt(arr[0] + arr[1].substr(0, 2))
	}
	return value
}

/**
 * 显示百分数的逆处理
 * 一般的百分数显示转化为数据库需要的int值
 */
const percentageToTable = (value, unit = '%') => {
	if (value) {
		value = value.toString()
		if (value.substr(value.length - 1, 1) === unit) {
			return parseInt(value.substr(0, value.length - 1))
		}
		const arr = value.split('.')
		if (arr.length === 1) {
			return parseInt(arr[0] + '0000')
		}
		if (arr[1].length === 1) {
			return parseInt(arr[0] + arr[1] + '000')
		}
		if (arr[1].length === 2) {
			return parseInt(arr[0] + arr[1] + '00')
		}
		if (arr[1].length === 3) {
			return parseInt(arr[0] + arr[1] + '0')
		}
		return parseInt(arr[0] + arr[1].substr(0, 4))
	}
	return value
}

/**
 * 百分数的显示
 * 数据库拿到的百分数都是以万分之一为单位的int值。要转换为一般情况
 * decimal：保留几位小数。直接去尾法
 */
const percentage = (value, decimal = 2, unit = '%') => {
	if (value) {
		var str = typeof(value) === "string" ? value : value.toString()
		if (str.length === 1) {
			if (decimal < 2) {
				str = `0${unit}`
			} else {
				str = `0.0${str}${unit}`
			}
		} else if (str.length === 2) {
			if (decimal === 2) {
				str = `0.${str}${unit}`
			} else if (decimal === 1) {
				str = `0.${str.substr(0, 1)}${unit}`
			} else {
				str = `0${unit}`
			}
		} else {
			if (decimal === 2) {
				str = str.substr(0, str.length - 2) + '.' + str.substr(str.length - 2, 2) + unit
			} else if (decimal === 1) {
				str = str.substr(0, str.length - 2) + '.' + str.substr(str.length - 2, 1) + unit
			} else {
				str = str.substr(0, str.length - 2) + unit
			}
		}
		return str
	}
	return value
}

/**
 * 电话号码的隐私处理
 * hide：默认隐藏4位
 */
const privacyPhone = (phone, hide = 4) => {
	if (phone && hide < 12 && hide > 0) {
		var start = parseInt((11 - hide) * 0.5)
		var end = 11 - start - hide
		var str = ''
		for (let i = 0; i < hide; i++) {
			str += '*'
		}
		return phone.substr(0, start) + str + phone.substr(start + hide, end)
	}
	return phone
}

module.exports = {
	// 文字最多显示多少个字，超过用省略号代替
	mostTextLength,
	// 数据库的金额显示与转换
	money, moneyToTable,
	// 数据库的百分数显示与转换
	percentage, percentageToTable,
	// 电话号码的隐私处理
	privacyPhone,
}